package com.cskaoyan.javse.oop2._2polymorphic._0introduction;

/**
 * 多态,从字面意思上理解,同一种事物,在不同的场景中,呈现出不同的状态.
 * 在Java中,多态指:
 *      同一种事物: 同一个引用(同一个父类引用)
 *      不同的场景: 指向不同的子类对象时
 *      不同的状态: 指的是使用引用调用同名成员方法时,结果不同
 *  总结来说，Java中的多态指的是，同一个父类引用指向不同子类对象时，调用同名成员方法，根据指向实际对象的不同，得到的行为也会随之不不同。
 *
 *  多态的发生条件
 *       1.继承
 *       2.子类重写父类方法
 *       3.父类引用指向不同的子类对象
 *
 * 总结一下,啥时候不能发生多态:
 *      1.不能继承,final类不能被继承
 *      2.不能重写的方法:
 *          a.final方法
 *          b.static方法
 *          c.private方法
 *          d.构造方法
 *      3.（这一点就需要手动完成了，看程序员用不用）
 *
 * @since 16:38
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 父类引用
        Person p;
        // 指向不同的子类对象
        p = new Teacher();
        p.eat();
        p = new Student();
        p.eat();
    }
}

class Person {
    public void eat(){
        System.out.println("吃饭");
    }
}
class Student extends Person{
    @Override
    public void eat() {
        System.out.println("我去食堂吃饭!");
    }
}
class Teacher extends Person{
    @Override
    public void eat() {
        System.out.println("我回家吃饭!");
    }
}